The present invention generally relates to computer software and more particularly to a system and method of managing network buffers for distribution among one or more applications and a plurality of network connections.
It is not uncommon for a computer server, such as a print server or a web server that is employed in a large area network that may include the Internet, to service large numbers of network connections. In the case of a print server or a web server, it may be necessary to service hundreds, if not thousands of network connections that may be simultaneously active. A system that is servicing such large numbers of network connections must employ network buffers which are generally associated with a server and which are typically fixed in number. As discussed herein a network buffer is defined as a series of bytes the length of current network maximum segment size and is used to both receive network data as well as move that data to its eventual destination.
Distributing buffers to each connection can become problematical due to the fact that some network connections may be sending very high volumes of data whereas others may not. If a network connection, which may be a computer terminal that sends a print job, for example, to a print server, such print jobs may comprise several megabytes of data, whereas sending an e-mail message may require only 5,000 bytes of data. As is known to those of ordinary skill in the art, distributing buffers among the network connections and applications is an important consideration in efficiently servicing the network connections during operation. Since there are typically only a finite number of network buffers that must be distributed among all network connections, there are usually not enough buffers in the pool of network buffers to distribute a large number of them to each network connection and/or application. If a network connection or an application are ones that frequently process large volumes of data, then it is desirable that a larger number of buffers be given to that network connection or application to efficiently handle the tasks that are being carried out. If there are a sufficient number of network buffers given to a high volume network connection or a high volume application, then the throughput of that connection and the system may be dramatically increased. Conversely, if a network connection typically involves a low data volume task, such as e-mails, for example, then there is no need to provide a large number of network buffers to such a network connection and a bare minimum of buffers may be completely adequate to service such network connections. If that is the case, then other network buffers can be available for use by higher data volume connections.
In the past, distribution of network buffers that are fixed in number have been made generally using one of two strategies. In one strategy, the buffers were distributed in random fashion based on whatever network connection requested them first. Although this is a simple solution, it leads to starvation among connections, especially those that are not particularly active. There is also the highly undesirable problem where a single network connection can virtually starve the entire system. A second strategy involves assigning the buffers relatively evenly to network connections regardless of the amount of activity that occurs on the connections. This insures that each connection will always have some buffers in the event of increased need. However, the problem with this solution is that a connection that requires a large number of buffers to achieve desirable throughput is unable to obtain them because they are dedicated to other connections.
Accordingly, it is a primary object of the present invention to provide an improved system and a method of managing network buffers in a manner whereby dynamic redistribution is performed for the purpose of distributing network buffers to those network connections which need them.
A related object of the present invention is to provide an improved system and method for managing network buffers which dynamically distributes buffers so that network connections that require maximum throughput are given as many buffers as possible, while all active connections are given a minimal number of buffers to insure minimal throughput.
Still another object is to provide such an improved system and method that continually evaluates the activity on network connections and dynamically distributes the buffers to network connections, by monitoring every network buffer in the pool of buffers to determine its status and availability.
Another related object lies in the provision of distributing a minimum number of network buffers to each network connection that is resident on a system, provided there are buffers available to do so, with each connection being limited to an initial number of buffers that have been distributed to thereby prevent a single connection from hogging all buffers. However, the number of buffers per connection can be redistributed in accordance with need and availability, taking into consideration the total number of buffers in the pool.
Still another object of the present invention is to provide such an improved system and method which uses a standard interface call to regulate the size of the frontplane interface to distribute the maximum number of buffers among network connections.
These and other objects of the present invention will become apparent upon reading the following detailed description while referring to the attached drawings.
The present invention comprises a system and method of managing a pool of network buffers to allocate or distribute the same among network connections in a manner which maximizes data throughput within the system is disclosed. The system and method employ a buffer manager which monitors the distribution of all buffers from the pool of network buffers and dynamically redistributes buffers to those applications and network connections which have higher data volumes and therefore a greater need for additional buffers. By reallocating buffers for use by those applications and network connections that require large amounts of data, the system throughput can be dramatically improved. It does this by attributing a higher priority value to the connection.